home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PCMania 75
/
PCMania CD75_1.iso
/
pcmania
/
virus75
/
ANTIVAMP.C
next >
Wrap
C/C++ Source or Header
|
1998-11-10
|
9KB
|
291 lines
/*----------------------------------------------*/
/* ANTI-VAMPIRO (c) 1998 Por Javier Guerrero Díaz
/* Busca en archivos el virus VAMPIRO.1000.
/*
/* La sintaxis es: ANTIVAMP [directorio] </a>.
/* El programa buscará el virus en todos los
/* archivos contenidos en el directorio especificado.
/* Programado con Borland C++ 5.02
/*----------------------------------------------*/
/* Javier Guerrero Díaz */
/* email: jgd@redestb.es */
/*-------------------------------*/
#include <stdio.h>
#include <dos.h>
#include <dir.h>
#include <conio.h>
#include <bios.h>
#include <stdlib.h>
#include <direct.h>
#include <io.h>
void fin(void);
void mal(void);
void intro(void);
void buscafichero(void);
void panta(void);
void obtieneinfo(void);
void mensaje(char *mensa);
void encontrado(void);
void matavir(void);
void elige(void);
void analiza(void);
#define LOWORD(l) ((unsigned int)(l))
#define HIWORD(l) ((unsigned int)(((unsigned long)(l) >> 16) & 0xFFFF))
#define LOBYTE(w) ((unsigned char)(w))
#define HIBYTE(w) ((unsigned char)(((unsigned short)(w) >> 8) & 0xFF))
union REGS registros;
char tecla,diractual[50],dirdestino[50];
int temp,infec=0,analiz=0,segmento;
unsigned long memlibre=0;
FILE *fichero;
struct ffblk arch;
struct date fecha;
struct dostime_t hora;
char cadena[]={ 0x9B, 0xBD, 0xE8, 0x98 };
char flag;
int far *direcc;
unsigned long int salto,offset;
char orgbyt[7];
#pragma argsused
void main(argc,argv)
int argc;
char *argv[];
{
if (*argv[1]==NULL || *argv[1]=='?')
{ printf("\nANTIVAMP (c)1998 Por Javier Guerrero Díaz\n");
printf("Sintaxis: ANTIVAMP [directorio] </a>\n"); exit(-1);}
if (argv[2][0]=='/' && argv[2][1]=='A') flag='a';
else if (argv[2][0]=='/' && argv[2][1]=='a') flag='a';
else flag=NULL;
getcwd(diractual,50);
_setcursortype(_NOCURSOR);
if (chdir(argv[1])==-1) { printf("\nError. No puedo acceder al directorio ");
printf("%s.\n",argv[1]); mal(); }
getcwd(dirdestino,50);
intro();
panta();
buscafichero();
fin();
}
void matavir(void)
{
int res,handle;
unsigned long tamanoreal;
tamanoreal=arch.ff_fsize-1000;
res=fseek(fichero,tamanoreal+0x225,SEEK_SET);
if (res!=0) {
mensaje("Error gestionando fichero!."); mal();
}
res=fread(orgbyt,1,7,fichero);
if (res!=7) {
mensaje("Error leyendo archivo!."); mal();
}
rewind(fichero);
res=fwrite(orgbyt,1,7,fichero);
if (res!=7) {
mensaje("Error escribiendo archivo!."); mal();
}
handle=fileno(fichero); res=chsize(handle,tamanoreal);
if (res!=0) {
mensaje("Error al modificar el tamaño del archivo."); mal();
}
if (flag!='a')
{
mensaje("OK!. Virus eliminado del fichero.");
}
else
{
window(1,1,80,25); textattr(WHITE|BLUE<<4); gotoxy(24,23);
cprintf(" ");
gotoxy(24,23); cprintf("OK!. Virus eliminado del fichero.");
sleep(1); gotoxy(24,23);
cprintf(" ");
}
}
void analiza(void)
{
int res;
char buffer[4];
res=fseek(fichero,3,SEEK_SET);
if (res!=0) {
mensaje("Error gestionando fichero!."); mal();
}
res=fread(buffer,1,4,fichero);
if (res!=4) {
mensaje("Error leyendo archivo!."); mal();
}
for (res=0;res<4;res++)
{
if (cadena[res]!=buffer[res]) goto sale;
}
encontrado();
sale:
}
void encontrado(void)
{
window(22,8,57,20);infec++;
textattr(WHITE|RED<<4);
cprintf("╔═══════════╦══════════╦═══════════╗");
cprintf("║ ║ ATENCION ║ ║");
cprintf("║ ╚══════════╝ ║");
cprintf("║ ║");
cprintf("║ ║");
cprintf("║ ║");
cprintf("║ ║");
cprintf("║ ║");
if (flag!='a'){
cprintf("║ PULSE LA TECLA 'SUPR' PARA MATAR ║");
cprintf("║ EL VIRUS O CUALQUIER OTRA PARA ║");
cprintf("║ IGNORAR ESTE FICHERO. ║");
cprintf("╚══════════════════════════════════╝");}
else {
cprintf("║ ATENCION: EL MODO AUTOMATICO HA ║");
cprintf("║ SIDO ACTIVADO. EL FICHERO SERA ║");
cprintf("║ DESINFECTADO AUTOMATICAMENTE. ║");
cprintf("╚══════════════════════════════════╝");}
gotoxy(3,5); cprintf("SE DETECTO LA MARCA DE INFECCION");
gotoxy(3,6); cprintf(" PROPIA DEL VIRUS 'VAMPIRO.1000'");
gotoxy(3,7); cprintf(" EN ARCHIVO:");
textattr(YELLOW|RED<<4); gotoxy(19,7); cprintf("%-12s",arch.ff_name);
textattr(WHITE|BLUE<<4); window(1,1,80,25);
mensaje("Atención: Fichero infectado por el virus !.");
if (flag!='a') elige();
else matavir();
panta(); obtieneinfo();
gotoxy(28,15); cprintf("%-12s",arch.ff_name);
gotoxy(62,15); cprintf("%-8ld",arch.ff_fsize);
gotoxy(33,17); cprintf("%-3d",analiz);
gotoxy(64,17); cprintf("%-3d",infec);
}
void elige(void)
{
int res=0;
res=bioskey(0);
if (res==0x5300) matavir();
else if (res==0x532E) matavir();
}
void obtieneinfo(void)
{
getdate(&fecha);
_dos_gettime(&hora);
registros.h.ah=0x48; registros.x.bx=0xFFFF;
int86(0x21,®istros,®istros);
memlibre=registros.x.bx; memlibre*=16;
gotoxy(14,11); cprintf("%02d/%02d/%d",fecha.da_day,fecha.da_mon,fecha.da_year);
gotoxy(34,11); cprintf("%02d:%02d:%02d",hora.hour,hora.minute,hora.second);
gotoxy(62,11); cprintf("%ld",memlibre); gotoxy(32,13); cprintf("%s",dirdestino);
}
void buscafichero(void)
{
temp=findfirst("*.*",&arch,0);
while (!temp)
{ obtieneinfo();
fichero=fopen(arch.ff_name,"r+b");
if (fichero==NULL)
{ gotoxy(24,23);
cprintf(" ");
gotoxy(24,23); cprintf("Error abriendo fichero!"); putch(7);
sleep(1); gotoxy(24,23);
cprintf(" ");
}
if (arch.ff_fsize<521) goto cierra;
analiz++;
gotoxy(28,15);
cprintf("%-12s",arch.ff_name);
gotoxy(62,15);
cprintf("%-8ld",arch.ff_fsize);
gotoxy(33,17);
cprintf("%-3d",analiz);
gotoxy(64,17);
cprintf("%-3d",infec);
analiza();
cierra: fclose(fichero);
temp=findnext(&arch);
}
chdir(diractual);
}
void intro(void)
{
clrscr(); gotoxy(20,9); textattr(YELLOW|BLUE<<4);
cprintf("╔═════════════════════════════════════╗\n"); gotoxy(20,10);
cprintf("║ ANTI-VAMPIRO ║\n"); gotoxy(20,11);
cprintf("║ (c) 1998 Por Javier Guerrero Diaz. ║\n"); gotoxy(20,12);
cprintf("║ Rastrea los archivos del directorio ║\n"); gotoxy(20,13);
cprintf("║ especificado como parámetro a la ║\n"); gotoxy(20,14);
cprintf("║ busqueda del virus VAMPIRO. ║\n"); gotoxy(20,15);
cprintf("╚═════════════════════════════════════╝\n");
textattr(LIGHTGRAY|BLACK<<4);tecla=getch();
clrscr();
}
void panta(void)
{
window(20,2,60,7);
gotoxy(1,1);
textattr(YELLOW|BLUE<<4);
cprintf("╔═══════════════════════════════════════╗");
cprintf("║ DETECTOR/VACUNA DEL VIRUS: VAMPIRO ║");
cprintf("║ (C) Por Javier Guerrero Diaz ║");
cprintf("╚═══════════════════════════════════════╝");
window(5,8,75,20);
cprintf("╔═════════════════════════════════════════════════════════════════════╗");
cprintf("║ ANALISIS DE ARCHIVOS ║");
cprintf("║ ║");
cprintf("║ Fecha: Hora: Memoria Libre: bytes ║");
cprintf("║ ║");
cprintf("║ Directorio de Búsqueda: ║");
cprintf("║ ║");
cprintf("║ Nombre de Archivo : Longitud Archivo: ║");
cprintf("║ ║");
cprintf("║ Archivos Analizados: Archivos Infectados: ║");
cprintf("║ ║");
cprintf("╚═════════════════════════════════════════════════════════════════════╝");
window(1,22,80,25);
cprintf("╔══════════════════════════════════════════════════════════════════════════════╗");
cprintf("║ RESULTADO OPERACION: ║");
cprintf("╚══════════════════════════════════════════════════════════════════════════════╝");
textattr(WHITE|BLUE<<4); window(1,1,80,25);
}
void mensaje(mensa)
char mensa[50];
{
window(1,1,80,25); textattr(WHITE|BLUE<<4); gotoxy(24,23);
cprintf(" ");
gotoxy(24,23); cprintf("%s",mensa); putch(7);
sleep(1); gotoxy(24,23);
cprintf(" ");
}
void fin(void)
{
_setcursortype(_NORMALCURSOR); textattr(LIGHTGRAY|BLACK<<4);
exit(0);
}
void mal(void)
{
_setcursortype(_NORMALCURSOR); textattr(LIGHTGRAY|BLACK<<4);
printf("\nPrograma finalizado anormalmente.\n");
exit(-1);
}